package features.advance.template.func;

import java.util.Objects;

/**
 * @author Administrator
 * @date 2022-01-22 下午 5:26
 *
 * 表示接受单个输入且不返回结果的操作，与大多数其他功能接口
 * 不同，Consumer预计通过副作用进行操作
 * 这是一个功能接口，其功能方法是accept(Object)
 * 自：1.8
 * 类型参数：<T> 操作的输入类型
 */
@FunctionalInterface
public interface Consumer<T> {

    /**
     * 对给定参数执行此操作
     * 参数：t-输入参数
     */
    void accept(T t);

    /**
     * 返回一个组合的Consumer，它依次执行此操作和after操作。如果执行
     * 任一操作引发异常，则将其转发给组合操作的调用者。如果执行此操作
     * 抛出异常，则不会执行after操作。
     *
     * @param after
     * @return
     */
    default Consumer<T> andThen(final Consumer<? super T> after){
        Objects.requireNonNull(after);
        return (T t) -> {accept(t);after.accept(t);};
    }

}
